home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / Sound / Amster / Source / search.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-03-11  |  10.4 KB  |  359 lines

  1. /*
  2. ** Amster - Search
  3. ** Copyright © 1999-2000 by Gürer Özen
  4. ** Copyright © 2000-2001 by Jacob Laursen
  5. **
  6. ** This program is free software; you can redistribute it and/or modify
  7. ** it under the terms of the GNU General Public License as published by
  8. ** the Free Software Foundation; either version 2 of the License, or
  9. ** (at your option) any later version.
  10. **
  11. ** This program is distributed in the hope that it will be useful,
  12. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. ** GNU General Public License for more details.
  15. **
  16. ** You should have received a copy of the GNU General Public License
  17. ** along with this program; if not, write to the Free Software
  18. ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19. */
  20.  
  21. #include "include/amster.h"
  22.  
  23. #include <proto/dos.h>
  24.  
  25. #include <MUI/Lamp_mcc.h>
  26. #include <MUI/NListview_mcc.h>
  27. #include <MUI/textinput_mcc.h>
  28.  
  29. #include "amster_Cat.h"
  30.  
  31. ULONG search_new(struct IClass *cl, Object *obj, struct opSet *msg);
  32. void search_go(struct searchdata *data, struct SearchArgs *RexxArgs);
  33. void search_reset(struct searchdata *data);
  34. void search_set(struct searchdata *data);
  35. void search_use(struct searchdata *data);
  36.  
  37. int search_state = 0;
  38.  
  39.  
  40. MUI_DISPATCH(search_dispatch)
  41. {
  42.     struct searchdata *data;
  43.  
  44.     switch (msg->MethodID) {
  45.         case OM_NEW:
  46.             return(search_new(cl,obj,(APTR)msg));
  47.         case SEARCH_GO:
  48.             data = INST_DATA(cl, obj);
  49.             search_go(data, (struct SearchArgs *)(((muimsg)msg)->arg1));
  50.             return NULL;
  51.         case SEARCH_NICK:
  52.             DoMethod(gui->WI_Hotlist, HOTLIST_NICK, (char *)(((muimsg)msg)->arg1));
  53.             return NULL;
  54.         case SEARCH_FOUND:
  55.             data = INST_DATA(cl, obj);
  56.             DoMethod(data->LV_Search, RESULTVIEW_FOUND, (song)(((muimsg)msg)->arg1));
  57.             return NULL;
  58.         case SEARCH_CLEAR:
  59.             data = INST_DATA(cl, obj);
  60.             DoMethod(data->LV_Search, RESULTVIEW_CLEAR, (((muimsg)msg)->arg1));
  61.             return NULL;
  62.         case SEARCH_RESET:
  63.             data = INST_DATA(cl, obj);
  64.             search_reset(data);
  65.             return NULL;
  66.         case SEARCH_SET:
  67.             data = INST_DATA(cl, obj);
  68.             search_set(data);
  69.             return NULL;
  70.         case SEARCH_GET:
  71.             data = INST_DATA(cl, obj);
  72.             search_use(data);
  73.             return NULL;
  74.         case SEARCH_USE:
  75.             data = INST_DATA(cl, obj);
  76.             prf_save("ENV:"AMSTER_PREFS);
  77.             DoMethod(data->pop, MUIM_Popstring_Close, TRUE);
  78.             return NULL;
  79.         case SEARCH_GETSTATE:
  80.             data = INST_DATA(cl, obj);
  81.             DoMethod(data->LV_Search, RESULTVIEW_GETSTATE);
  82.             return NULL;
  83.         case SEARCH_TOGGLE:
  84.             data = INST_DATA(cl, obj);
  85.             DoMethod(data->LV_Search, RESULTVIEW_TOGGLE_ONE);
  86.             return NULL;
  87.         case SEARCH_FILLSTEM:
  88.             data = INST_DATA(cl, obj);
  89.             DoMethod(data->LV_Search, RESULTVIEW_FILLSTEM, (((muimsg)msg)->arg1));
  90.             return NULL;
  91.         case SEARCH_DOWNLOAD:
  92.             data = INST_DATA(cl, obj);
  93.             DoMethod(data->LV_Search, RESULTVIEW_DOWNLOAD, 3, (((muimsg)msg)->arg1));
  94.             return NULL;
  95.         case SEARCH_ADDTOHOTLIST:
  96.             data = INST_DATA(cl, obj);
  97.             DoMethod(data->LV_Search, RESULTVIEW_ADDTOHOTLIST);
  98.             return NULL;
  99.         case SEARCH_NICKFROMLIST:
  100.             data = INST_DATA(cl, obj);
  101.             DoMethod(data->LV_Search, RESULTVIEW_NICKFROMLIST);
  102.             return NULL;
  103.     }
  104.     return(DoSuperMethodA(cl, obj, msg));
  105. }
  106.  
  107.  
  108. ULONG search_new(struct IClass *cl, Object *obj, struct opSet *msg)
  109. {
  110.     static char *numbers = "0123456789";
  111.     static char *opts[] = {
  112.         (char*)_MSG_COMPARE_NONE,
  113.         (char*)_MSG_COMPARE_ATLEAST,
  114.         (char*)_MSG_COMPARE_EQUALTO,
  115.         (char*)_MSG_COMPARE_ATBEST,
  116.         NULL
  117.     };
  118.     struct searchdata *data;
  119.     Object *str, *maxstr, *sbut;
  120.     Object *pop;
  121.     Object *popspeed, *popspeedval, *popbit, *popbitval, *popfreq, *popfreqval;
  122.     Object *popuse, *popreset;
  123.     Object *LV_Search;
  124.  
  125.     if (UseLamps || UseTWF) gColFormat = "COL=0 BAR, COL=1 BAR, COL=2 BAR, COL=3 BAR, COL=4 BAR, COL=5 BAR, COL=6 BAR, COL=7 BAR";
  126.     else gColFormat = "COL=1 BAR, COL=2 BAR, COL=3 BAR, COL=4 BAR, COL=5 BAR, COL=6 BAR, COL=7 BAR";
  127.  
  128.     if (opts[0] == (char *)_MSG_COMPARE_NONE)
  129.         localize_array(opts);
  130.  
  131.     if (obj = (Object *)DoSuperNew(cl,obj,
  132.         Child, VGroup,
  133.             Child, ColGroup(2),
  134.                 Child, Label2(MSG_SEARCH),
  135.                 Child, HGroup,
  136.                     Child, str = TextinputObject,
  137.                         StringFrame,
  138.                         MUIA_Textinput_Multiline, FALSE,
  139.                         MUIA_HorizWeight, 400,
  140.                         MUIA_String_MaxLen, 80,
  141.                         MUIA_CycleChain, 1,
  142.                     End,
  143.                     Child, sbut = SimpleButton(MSG_SEARCH_GAD),
  144.                     Child, Label2(MSG_MAX),
  145.                     Child, maxstr = TextinputObject,
  146.                         StringFrame,
  147.                         MUIA_Textinput_Multiline, FALSE,
  148.                         MUIA_String_Accept, numbers,
  149.                         MUIA_String_Integer, 100,
  150.                         MUIA_String_MaxLen, 4,
  151.                         MUIA_CycleChain, 1,
  152.                     End,
  153.                     Child, pop = PopobjectObject,
  154.                         MUIA_Popstring_Button, PopButton(MUII_PopUp),
  155.                         MUIA_Popobject_Object, VGroup,
  156.                             MUIA_Frame, MUIV_Frame_PopUp,
  157.                             Child, TextObject,
  158.                                 MUIA_Text_Contents, MSG_ADVSEARCH,
  159.                             End,
  160.                             Child, ColGroup(3),
  161.                                 Child, Label2(MSG_LINESPEED),
  162.                                 Child, popspeed = CycleObject,
  163.                                     MUIA_Cycle_Active, 0,
  164.                                     MUIA_Cycle_Entries, opts,
  165.                                     MUIA_CycleChain, 1,
  166.                                 End,
  167.                                 Child, popspeedval = CycleObject,
  168.                                     MUIA_Cycle_Active, 1,
  169.                                     MUIA_Cycle_Entries, nap_linktype,
  170.                                     MUIA_CycleChain, 1,
  171.                                 End,
  172.                                 Child, Label2(MSG_BITRATE),
  173.                                 Child, popbit = CycleObject,
  174.                                     MUIA_Cycle_Active, 0,
  175.                                     MUIA_Cycle_Entries, opts,
  176.                                     MUIA_CycleChain, 1,
  177.                                 End,
  178.                                 Child, HGroup,
  179.                                     Child, popbitval = TextinputObject,
  180.                                         StringFrame,
  181.                                         MUIA_Textinput_Multiline, FALSE,
  182.                                         MUIA_String_Accept, numbers,
  183.                                         MUIA_String_Integer, 128,
  184.                                         MUIA_String_MaxLen, 4,
  185.                                         MUIA_CycleChain, 1,
  186.                                     End,
  187.                                     Child, Label2(MSG_KBPS),
  188.                                 End,
  189.                                 Child, Label2(MSG_FREQUENCY),
  190.                                 Child, popfreq = CycleObject,
  191.                                     MUIA_Cycle_Active, 0,
  192.                                     MUIA_Cycle_Entries, opts,
  193.                                     MUIA_CycleChain, 1,
  194.                                 End,
  195.                                 Child, HGroup,
  196.                                     Child, popfreqval = TextinputObject,
  197.                                         StringFrame,
  198.                                         MUIA_Textinput_Multiline, FALSE,
  199.                                         MUIA_String_Accept, numbers,
  200.                                         MUIA_String_Integer, 44100,
  201.                                         MUIA_String_MaxLen, 6,
  202.                                         MUIA_CycleChain, 1,
  203.                                     End,
  204.                                     Child, Label2(MSG_HZ),
  205.                                 End,
  206.                             End,
  207.                             Child, HGroup,
  208.                                 Child, popuse = SimpleButton(MSG_ADVUSE_GAD),
  209.                                 Child, HSpace(0),
  210.                                 Child, popreset = SimpleButton(MSG_ADVRESET_GAD),
  211.                             End,
  212.                         End,
  213.                     End,
  214.                 End,
  215.             End,
  216.             Child, LV_Search = NewObject(gui->resultview_mcc->mcc_Class, NULL, MUIA_Amster_ContextMenu, TRUE, TAG_DONE),
  217.         End,
  218.         TAG_MORE, msg->ops_AttrList))
  219.     {
  220.         data = INST_DATA(cl, obj);
  221.         data->str = str;
  222.         data->maxstr = maxstr;
  223.         data->pop = pop;
  224.         data->popspeed = popspeed;
  225.         data->popspeedval = popspeedval;
  226.         data->popbit = popbit;
  227.         data->popbitval = popbitval;
  228.         data->popfreq = popfreq;
  229.         data->popfreqval = popfreqval;
  230.         data->LV_Search = LV_Search;
  231.  
  232.         DoMethod(str,   MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, obj, 2, SEARCH_GO, NULL);
  233.         DoMethod(sbut,  MUIM_Notify, MUIA_Pressed, FALSE, obj, 2, SEARCH_GO, NULL);
  234.  
  235.         DoMethod(popuse,   MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, SEARCH_USE  );
  236.         DoMethod(popreset, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, SEARCH_RESET);
  237.  
  238.         return((ULONG)obj);
  239.     }
  240.     return(0);
  241. }
  242.  
  243.  
  244. void search_go(struct searchdata *data, struct SearchArgs *RexxArgs)
  245. {
  246.     static char *opts[] = {
  247.         "AT LEAST",
  248.         "EQUAL TO",
  249.         "AT BEST"
  250.     };
  251.     char *p;
  252.     u_long String, MaxResults;
  253.     u_long tmp, tmp2;
  254.  
  255.     if (gui_onlinestate < ONLINE) return;
  256.  
  257.     if (RexxArgs) {
  258.         String = (u_long)RexxArgs->String;
  259.  
  260.         if (RexxArgs->MaxResults != -1) MaxResults = (u_long)RexxArgs->MaxResults;
  261.         else GetAttr(MUIA_String_Integer, data->maxstr, &MaxResults);
  262.     }
  263.     else {
  264.         GetAttr(MUIA_String_Contents, data->str, &String);
  265.         GetAttr(MUIA_String_Integer, data->maxstr, &MaxResults);
  266.     }
  267.  
  268.     if (!String || ((char *)String)[0] == 0) return;
  269.     if (MaxResults < 0) MaxResults = 0;
  270.  
  271.     p = nap_buf + sprintf(nap_buf, "FILENAME CONTAINS \"%s\" MAX_RESULTS %d", String, MaxResults);
  272.  
  273.     GetAttr(MUIA_Cycle_Active, data->popspeed, &tmp);
  274.     GetAttr(MUIA_Cycle_Active, data->popspeedval, &tmp2);
  275.     if(tmp) p=p+sprintf(p, " LINESPEED \"%s\" %d", opts[tmp-1], tmp2);
  276.  
  277.     GetAttr(MUIA_Cycle_Active, data->popbit, &tmp);
  278.     GetAttr(MUIA_String_Integer, data->popbitval, &tmp2);
  279.     if(tmp) p=p+sprintf(p, " BITRATE \"%s\" %d", opts[tmp-1], tmp2);
  280.  
  281.     GetAttr(MUIA_Cycle_Active, data->popfreq, &tmp);
  282.     GetAttr(MUIA_String_Integer, data->popfreqval, &tmp2);
  283.     if(tmp) sprintf(p, " FREQ \"%s\" %d", opts[tmp-1], tmp2);
  284.  
  285.     if (prf->clrlist) DoMethod(data->LV_Search, RESULTVIEW_CLEAR, CLEAR_ALL);
  286.     DoMethod(data->LV_Search, RESULTVIEW_RESETCOUNT);
  287.  
  288.     DoMethod(data->LV_Search, RESULTVIEW_STAT2, 1);
  289.     nap_send(NAPC_SEARCH);
  290. }
  291.  
  292.  
  293. void search_reset(struct searchdata *data)
  294. {
  295.     int i;
  296.     BYTE tmp[9];
  297.  
  298.     set(data->popspeed,    MUIA_Cycle_Active,   0);
  299.     set(data->popspeedval, MUIA_Cycle_Active,   1);
  300.     set(data->popbit,      MUIA_Cycle_Active,   0);
  301.     set(data->popbitval,   MUIA_String_Integer, 128);
  302.     set(data->popfreq,     MUIA_Cycle_Active,   0);
  303.     set(data->popfreqval,  MUIA_String_Integer, 44100);
  304.     for (i=0; i<7; i++) {
  305.         ((BYTE *)&tmp)[i] = i;
  306.     }
  307.     ((BYTE *)&tmp)[8] = -1;
  308.     set(data->LV_Search, MUIA_NList_Columns, &tmp);
  309. }
  310.  
  311.  
  312. void search_set(struct searchdata *data)
  313. {
  314.     set(data->maxstr,      MUIA_String_Integer, prf->max);
  315.     set(data->popspeed,    MUIA_Cycle_Active,   prf->speedqual);
  316.     set(data->popspeedval, MUIA_Cycle_Active,   prf->speedval);
  317.     set(data->popbit,      MUIA_Cycle_Active,   prf->bitratequal);
  318.     set(data->popbitval,   MUIA_String_Integer, prf->bitrateval);
  319.     set(data->popfreq,     MUIA_Cycle_Active,   prf->freqqual);
  320.     set(data->popfreqval,  MUIA_String_Integer, prf->freqval);
  321.  
  322.     ((BYTE *)&prf->ColumnOrder)[8] = -1;
  323.     set(data->LV_Search, MUIA_NList_Columns, &prf->ColumnOrder);
  324. }
  325.  
  326.  
  327. void search_use(struct searchdata *data)
  328. {
  329.     u_long tmp;
  330.     int i = 0;
  331.  
  332.     GetAttr(MUIA_Cycle_Active,data->popspeed,&tmp);
  333.     prf->speedqual = tmp;
  334.  
  335.     GetAttr(MUIA_Cycle_Active,data->popspeedval,&tmp);
  336.     prf->speedval = tmp;
  337.  
  338.     GetAttr(MUIA_Cycle_Active,data->popbit,&tmp);
  339.     prf->bitratequal = tmp;
  340.  
  341.     GetAttr(MUIA_String_Integer,data->popbitval,&tmp);
  342.     prf->bitrateval = (int)tmp;
  343.  
  344.     GetAttr(MUIA_Cycle_Active,data->popfreq,&tmp);
  345.     prf->freqqual = tmp;
  346.  
  347.     GetAttr(MUIA_String_Integer,data->popfreqval,&tmp);
  348.     prf->freqval = (int)tmp;
  349.  
  350.     GetAttr(MUIA_String_Integer,data->maxstr,&tmp);
  351.     prf->max = (int)tmp;
  352.  
  353.     GetAttr(MUIA_NList_Columns, data->LV_Search, &tmp);
  354.     while (((BYTE *)tmp)[i] != -1) {
  355.         prf->ColumnOrder[i] = ((BYTE *)tmp)[i];
  356.         i++;
  357.     }
  358. }
  359.